package com.david.course_design.shopping_center.module.goods.goods.service.impl;

import com.david.course_design.shopping_center.module.goods.goods.entity.Goods;
import com.david.course_design.shopping_center.module.goods.goods.mapper.GoodsMapper;
import com.david.course_design.shopping_center.module.goods.goods.service.GoodsService;
import com.david.course_design.shopping_center.result.PageObject;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Service
public class GoodsServiceImpl implements GoodsService {

    //  依赖注入 dependency injection
    @Resource
    private GoodsMapper goodsMapper;

    /**
     * 通过主键（id）查询商品信息
     *
     * @param id 商品的主键
     * @return 返回商品信息
     */
    @Override
    public Goods selectGoodsById(Integer id) {
        //  通过主键查询商品信息，返回一个商品对象
        Goods goods = goodsMapper.selectGoodsById(id);

        //  判断得到的商品对象是否为空
        if (goods != null) {
            //  输出日志
            System.out.println(goods);
            System.out.println();

            //  将得到的商品对象返回给调用处
            return goods;
        }

        //  否则返回 空（null）
        return null;
    }

    /**
     * 查询商品信息（分页）
     *
     * @param pageObject 分页对象（其中包含 pageSize：每页数据条数；pageNumber：第几页）
     * @return 回一个 Goods 对象 这个对象中包含一个 Goods 对象的集合和一些分页相关的其他信息
     */
    @Override
    public PageInfo<Goods> selectGoodsPaging(PageObject pageObject) {
        PageHelper.startPage(pageObject.getPageNumber(), pageObject.getPageSize());

        PageInfo<Goods> goodsPageInfo = new PageInfo<>(goodsMapper.selectAll());

        //  如果返回的含有商品对象 的 集合 的 分页对象不为空
        if (goodsPageInfo != null) {
            //  输出日志
            System.out.println(goodsPageInfo);
            System.out.println();

            //  将得到的商品对象返回给调用处
            return goodsPageInfo;
        }

        //  否则返回 空（null）
        return null;
    }

    /**
     * 查询所有商品信息（不分页）
     *
     * @return 返回含有所有商品信息的集合对象
     */
    @Override
    public List<Goods> selectAllGoods() {
        // 查询所有商品信息 不分页 返回一个含有所有商品信息对象的集合
        List<Goods> goods = goodsMapper.selectAll();

        //  如果返回的 含有所有商品信息对象的集合不为空
        if (goods != null) {

            //  输出日志
            System.out.println(goods);
            System.out.println();

            //返回含有所有商品信息对象的集合给调用处
            return goods;
        }

        //  否则返回 空（null）
        return null;
    }

}
